package Calculator;

import static org.junit.Assert.assertEquals;

import java.util.Arrays;
import java.util.Collection;

import org.junit.Before;
import org.junit.Test;
import org.junit.runners.Parameterized.Parameters;

public class SquareTest {

  private static Calculator calculator = new Calculator();
  private int param;
  private int result;
  /*
   * 定义测试数据的集合，也就是上述的data()方法，
   * 该方法可以任意命名，但是必须使用@Parameters标注进行修饰。
   * 这个方法的框架就不予解释了，大家只需要注意其中的数据，是一个二维数组，
   * 数据两两一组，每组中的这两个数据，一个是参数，一个是你预期的结果
   * */
  @Parameters
  public static Collection data() {//定义测试数据的集合
      return Arrays.asList(new Object[][] { { 2, 4 }, { 0, 0 }, { -3, 9 }, });
  }

  // 构造函数，对变量进行初始化，参数的顺序与数据集成的顺序相关
  public SquareTest(int param, int result) {
      this.param = param;
      this.result = result;
  }

  // 复原操作，表明对每个Test方法测试以后都会进行这个方法操作。
  @Before
  public void setUp() throws Exception {
      calculator.clear();// 结果清零
  }

  @Test
  public void testSquare() {
      calculator.square(param);
      assertEquals(result, calculator.getResult());
  }
}
